package com.lin.missyou.util;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.lin.missyou.exception.http.ServerErrorException;
import org.springframework.beans.factory.annotation.Autowired;

import javax.persistence.AttributeConverter;
import javax.persistence.Convert;
import javax.persistence.Converter;
import java.util.HashMap;
import java.util.Map;
// 第一个泛型类型就是  entity字段的类型
// 第二个泛型类型就是  数据库字段的类型

@Converter
public class MapAndJson implements AttributeConverter<Map<String, Object>, String> {
    /*
    ObjectMapper类是Jackson库的主要类，它提供一些功能将数据集或对象转换的实现。
    它将使用JsonParser和JsonGenerator实例来实现JSON的实际读/写。
    */
    @Autowired
    private ObjectMapper mapper;

    @Override
    public String convertToDatabaseColumn(Map<String, Object> map) {

        try {
            return mapper.writeValueAsString(map);
        } catch (Exception e) {
            e.printStackTrace();
            throw new ServerErrorException(99999);
        }
    }


    @Override
    @SuppressWarnings("unchecked")
    public Map<String, Object> convertToEntityAttribute(String s) {
        try {
            return mapper.readValue(s, HashMap.class);
        } catch (Exception e) {
            e.printStackTrace();
            throw new ServerErrorException(9999);
        }
    }
}
